<?php 
session_start();
//验证码
//创建验证码类
	class Code{
//		成员属性
//		画布
		private $img;
//		宽度
		private $width;
//		高度
		private $height;
//		验证码长度
		private $codeLen;
//		验证码字体大小
		private $codeSize;
//		画布背景颜色
		private $bgColor;
//		种子
		private $seed;
	
//创建一个构造函数	并传形参宽度，高度 验证码长度，验证字体大小，种子
	public function __construct($width=NULL,$height=NULL,$codeLen=NULL,$codeSize=NULL,$bgColor=NULL,$seed=NULL){
//		检测是否是空值，如果是就给一个默认值，如果不是就走它本身
//		宽度
		$this->width=is_null($width)?130:$width;
//		高度
		$this->height=is_null($height)?70:$height;
//		验证码字体大小
		$this->codeSize=is_null($codeSize)?28:$codeSize;
//		验证码字体长度
		$this->codeLen=is_null($codeLen)?4:$codeLen;
//		画布的背景颜色
		$this->bgColor=is_null($bgColor)?'#fffffff':$bgColor;
//		种子
		$this->seed=is_null($seed)?'sdkgaivadfuhaeofkyeiworyakdjfhdvjbhviu123456987':$seed;
	}
/*
 * 创建外部公用方法
 */
	public function show(){
//		1、发送头部
		header("Content-type:image/png");
//		2、创建画布
		$this->createbg();
//		3、填写内容
		$this->write();
//		4、干扰
		$this->obstruct();
//		5、输出
		imagepng($this->img);
//		6、销毁
		imagedestroy($this->img);
	}
/*
 * 创建画布方法
 */
	private function createbg(){
//		创建画布
		$img=imagecreatetruecolor(130, 70);
//		颜色
//		因为上面传进来的颜色是16进制的，而这里只能接受10进制的颜色，所以这里需要进制转换
//		hexdec($hex_string)16进制转10进制函数
		$color=hexdec($this->bgColor);
//		填充颜色
		imagefill($img, 0, 0, $color);
//		再赋值回去
		$this->img=$img;
	}
/*
 * 创建填写内容的方法
 */
	private function write(){
//		声明一个空的字符串
		$str='';
//		循环得到验证码长度
		for($i=0;$i<$this->codeLen;$i++){
////			随机挑选里面的内容
			$d=mt_rand(0, strlen($this->seed)-1);
////			字体位置的坐标
////			x轴=总宽度/字数*第几个
			$x=($this->width/$this->codeLen)*$i+10;
////			y轴=画布的高度加上字体的高度/2
			$y=($this->height+$this->codeSize)/2;
////			获取到随机种子的位置下标的值
			$text=$this->seed[$d];
//				随机获取的结果存在$str字符串里
			$str.=$text;
////			添加颜色
			$color=imagecolorallocate($this->img, mt_rand(0, 255), mt_rand(0, 255),mt_rand(0, 255));
////			填充颜色 imagettftext(画布, 字体大小, 偏移度, $x, $y, $color, 字体库, $text)
			imagettftext($this->img, $this->codeSize,mt_rand(-45, 45), $x, $y, $color, './font/HYCC.ttf', $text);
		}
//		把随机得到的验证码赋值回去
		$_SESSION['code']=$str;
	}
/*
 * 创建干扰方式
 */
	private function obstruct(){
//		画点
	for($i=0;$i<1000;$i++){
//				为图像分配颜色
				$color=imagecolorallocate($this->img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
				//	imagesetpixel(资源图, x坐标, y坐标, 填充颜色)
				imagesetpixel($this->img, mt_rand(0, $this->width),mt_rand(0, $this->height), $color);
			}
//		划线
	for($i=0;$i<10;$i++){
//				维图像分配颜色
				$color=imagecolorallocate($this->img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
//				imageline(资源图, x1坐标, y1坐标, x2坐标, y2坐标, $color)
				imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
			}
						
		}
	
	}

//	实例化并传参
//	画布宽度，画布高度，验证码的长度，字体大小，画布背景颜色，种子
	 $code=new Code(130,70,4,28,'#000000','askdjfhzcxkvjbuewrht123');
//调用方法
	$code->show();









